<template>
	<!-- 跳转到微信授权地址 -->
</template>

<script>
	import queryStringify from '@/utils/queryStringify'
	import store from '@/store'
	import utils from '@/utils/util.js';
	import Api from '@/api/wxofficial'

	export default {

		data() {
			return {
				// 页面来源是否为微信回调
				isCallback: false
			}
		},

		created() {
			// 处理微信回调
			this.onCallback()
			// 跳转到微信授权
			this.redirectUrl()
		},

		methods: {

			// 处理微信回调
			onCallback() {
				// 接收微信传来的参数
				const wxParam = queryStringify.parse(window.location.search)
				if (!utils.isEmpty(wxParam)) {
					const url = window.location.href.replace(window.location.search, '')
					window.location.href = url + '?' + utils.urlEncode(wxParam)
					return
				}
				// 获取code参数
				const query = this.$route.query
				if (utils.isEmpty(query) || !query.code) {
					return
				}
				// 请求后端获取微信用户信息
				this.isCallback = true
				Api.oauthUserInfo(query.code)
					.then(({
						data
					}) => {
						console.log('用户同意了授权')
						console.log('userInfo：', data)
						// 授权成功事件
						this.onAuthSuccess(data)
					})
			},

			async onAuthSuccess(userInfo) {
				const app = this
				// 提交到后端
				store.dispatch('LoginWxOfficial', userInfo)
					.then(result => {
						uni.hideLoading()
						// 一键登录成功
						app.$toast("登录成功")
						// 跳转回原页面
						setTimeout(() => uni.switchTab({
							url:"/pages/user/user"
						}), 2000)
					})
					.catch(err => {
						const resultData = err.result.data
						// 显示错误信息
						if (utils.isEmpty(resultData)) {
							app.$toast(err.result.message)
						}
					})
			},

			// 跳转到微信授权
			redirectUrl() {
				if (this.isCallback) {
					return
				}
				const callbackUrl = window.location.href
				Api.oauthUrl(callbackUrl)
					.then(result => {
						const url = result.data.url
						window.location.href = url
					})
			},

			// 将oauth提交给父级
			async onEmitSuccess({
				userInfo,
				encryptedData,
				iv
			}) {
				this.$emit('success', {
					oauth: 'WXOFFICIAL', // 第三方登录类型: WXOFFICIAL
					userInfo,
					encryptedData,
					iv
				})
			},

			/**
			 * 登录成功-跳转回原页面
			 */
			onNavigateBack(delta = 1) {
				const pages = getCurrentPages()
				if (pages.length > 1) {
					uni.navigateBack({
						delta: Number(delta || 1)
					})
				} else {
					this.$link('/pages/index/index')
				}
			}

		}
	}
</script>